123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- using System;
- using ExternPropertyAttributes;
- using UnityEngine;
- using UnityEngine.Rendering.Universal;
- // ReSharper disable RedundantDefaultMemberInitializer
- #if UNITY_2022_3_OR_NEWER
- namespace FlatKit {
- [CreateAssetMenu(fileName = "FogSettings", menuName = "FlatKit/Fog Settings")]
- public class FogSettings : ScriptableObject {
- [Space] // Expandable.
- [Label("<b>Distance Fog</b>")]
- [Tooltip("Whether to use distance fog. This is the fog that fades out the scene into the background.")]
- public bool useDistance = true;
- [Tooltip("The color changes from near (left) to far (right).")]
- [Label(" Distance Gradient"), ShowIf(nameof(useDistance))]
- public Gradient distanceGradient;
- [Tooltip("The distance from the camera in world units at which the fog starts.")]
- [Label(" Near"), ShowIf(nameof(useDistance))]
- public float near = 0;
- [Tooltip("The distance from the camera in world units at which the fog ends.")]
- [Label(" Far"), ShowIf(nameof(useDistance))]
- public float far = 100;
- [Range(0, 1)]
- [Tooltip("How much the fog should be applied. 0 means no fog, 1 means full fog.")]
- [Label(" Intensity"), ShowIf(nameof(useDistance))]
- public float distanceFogIntensity = 1.0f;
- [Space(12)]
- [HorizontalLine(1, EColor.Translucent)]
- [Label("<b>Height Fog</b>")]
- [Tooltip("Whether to use height fog. This is the fog that goes up from the ground.")]
- public bool useHeight = false;
- [Tooltip("The color changes from low (left) to high (right).")]
- [Label(" Height Gradient"), ShowIf(nameof(useHeight))]
- public Gradient heightGradient;
- [Tooltip("The height in world units at which the fog starts.")]
- [Label(" Low"), ShowIf(nameof(useHeight))]
- public float low = 0;
- [Tooltip("The height in world units at which the fog ends.")]
- [Label(" High"), ShowIf(nameof(useHeight))]
- public float high = 10;
- [Range(0, 1)]
- [Tooltip("How much the fog should be applied. 0 means no fog, 1 means full fog.")]
- [Label(" Intensity"), ShowIf(nameof(useHeight))]
- public float heightFogIntensity = 1.0f;
- [Tooltip("Reverts fog behavior to pre-3.9.0. This is useful if you want to use the new fog settings, but want to " +
- "keep the old look of your scene.")]
- [Label(" Camera Relative Position"), ShowIf(nameof(useHeight))]
- public bool cameraRelativePosition = false;
- [Space(12)]
- [HorizontalLine]
- [Header("Blending")]
- [Range(0, 1)]
- [Tooltip("The ratio between distance and height fog. 0 means only distance fog, 1 means only height fog.")]
- [Label(" Distance/Height Blend")]
- public float distanceHeightBlend = 0.5f;
- [Header("Advanced Settings")]
- [Tooltip("The render stage at which the effect is applied. To exclude transparent objects, like water or " +
- "UI elements, set this to \"Before Transparent\".")]
- [Label(" Render Event")]
- public RenderPassEvent renderEvent = RenderPassEvent.BeforeRenderingPostProcessing;
- [Tooltip("Whether the effect should be applied in the Scene view as well as in the Game view. Please keep in " +
- "mind that Unity always renders the scene view with the default Renderer settings of the URP config.")]
- [Label(" Apply In Scene View")]
- public bool applyInSceneView = true;
- [HideInInspector]
- public Material effectMaterial;
- internal Action onSettingsChanged;
- internal Action onReset;
- private void OnValidate() {
- low = Mathf.Min(low, high);
- high = Mathf.Max(low, high);
- onSettingsChanged?.Invoke();
- }
- private void Reset() {
- onReset?.Invoke();
- }
- private void OnDestroy() {
- onSettingsChanged = null;
- onReset = null;
- }
- }
- }
- #else
- namespace FlatKit {
- [CreateAssetMenu(fileName = "FogSettings", menuName = "FlatKit/Fog Settings")]
- public class FogSettings : ScriptableObject {
- [Header("Distance Fog")]
- public bool useDistance = true;
- public Gradient distanceGradient;
- public float near = 0;
- public float far = 100;
- [Range(0, 1)]
- public float distanceFogIntensity = 1.0f;
- public bool useDistanceFogOnSky = false;
- [Header("Height Fog")]
- [Space]
- public bool useHeight = false;
- public Gradient heightGradient;
- public float low = 0;
- public float high = 10;
- [Range(0, 1)]
- public float heightFogIntensity = 1.0f;
- public bool useHeightFogOnSky = false;
- [Header("Blending")]
- [Space]
- [Range(0, 1)]
- public float distanceHeightBlend = 0.5f;
- [Header("Advanced settings")]
- [Space, Tooltip("The render stage at which the effect is applied. To exclude transparent objects, like water or " +
- "UI elements, set this to \"Before Transparent\".")]
- public RenderPassEvent renderEvent = RenderPassEvent.BeforeRenderingPostProcessing;
- [Tooltip("Whether the effect should be applied in the Scene view as well as in the Game view. Please keep in " +
- "mind that Unity always renders the scene view with the default Renderer settings of the URP config.")]
- public bool applyInSceneView = true;
- private void OnValidate() {
- low = Mathf.Min(low, high);
- high = Mathf.Max(low, high);
- }
- }
- }
- #endif
|